package com.sky.demo;


import org.springframework.util.ObjectUtils;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 处理增删改查方法
 * @author chengjy
 * @date 2023/5/1
 */
public class MyBatisUtils {
    /**
     * 处理方法入参，支持Map,Integer,Long,String,Domain
     */
    public Map<String,Object> paramHandle(List<String> keyList, Object obj) throws NoSuchFieldException, IllegalAccessException {
        //1、创建一个Map，存储keylist中字段名对应的值
        Map<String,Object> paramHandle = new HashMap();
        if(ObjectUtils.isEmpty(keyList) || ObjectUtils.isEmpty(obj))return paramHandle;
        //2、解析Obj的类型
        if(obj.getClass().equals(HashMap.class)){
            paramHandle = (Map<String,Object>) obj;
        }else if(obj.getClass().equals(String.class)){
            paramHandle.put(keyList.get(0),obj);
        }else if (obj.getClass().equals(Long.class)){
            paramHandle.put(keyList.get(0),obj);
        }else if(obj.getClass().equals(Integer.class)){
            paramHandle.put(keyList.get(0),obj);
        }else {
            //反射获取属性值
            Class<?> clazz = obj.getClass();
            //循环keylist
            for (String name : keyList) {
                //从当前的类开始找，没找到再从父类中找。
                for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
                    try {
                        Field field = clazz.getDeclaredField(name);
                        field.setAccessible(true);
                        paramHandle.put(name,field.get(obj));
                    } catch (Exception e) {
                        // 这里甚么都不能抛出去。
                        // 如果这里的异常打印或者往外抛，则就不会进入
                    }
                }
            }
        }

        return paramHandle;
    }


}
